public class MyArray<T> {
    public T[]array=(T[])new Object[10];//1

    public T getPos(int pos){
        return this.array[pos];
    }
    public void setVal(int pos,T val){
        this.array[pos]=val;
    }

    public static void main(String[] args) {
        MyArray<Integer> myArray=new MyArray<>();//2
        myArray.setVal(0,10);
        myArray.setVal(1,12);//字符串也可以存放
        int ret= myArray.getPos(1);//3
//        myArray.getPos(ret);
        System.out.println(ret);
        myArray.setVal(2,3);//4
        //确实是可以存放任何类型的
        //但是要拿出来，必须要用具体的类型，也就是强制类型转化
        //你要是用Object接受也可以
        //但你用的时候也会去具体的
        //
        //

        //虽然在这种情况下，当前数组，任何数据类型都可以存放，但是，更多的情况下，我们还是希望它只要一种数据类型，而不是同时有这么多的类型
        //所以，泛型的主要目的：就是指定当前的容器，要吃有什么类型的对象，让编译器去检查
        //
        System.out.println(ret);
    }
    //1.类名后的<T>代表占位符，表示当前类是一个泛型类
    //了解：规范：类型形参一般使用一个大写字母表示，常用的名称有：

    //E表示Element
    //K表示Key
    //V表示Value
    //N表示Number
    //T表示Type
    //SUV等等表示第二、三、四个类型
    //
    //注释1处。不能new泛型类型的数组
    //因为泛型到底是啥类型啊，你占据多大位置
    //我啥也不知道，自然是不能够给你new的
    //

    //那在课件中的代码，强制类型转换，
    //也就是把Object转换为T类型，是否是足够好
    //答案是未必的
    //注释2处，类型后加入<integer>指定当前类型
    //注释3处，不需要强制类型转换
    //4.注释4代码编译出错，因为此时在注释二的地方指定类当前的类型，此时在注释4，编译器会在存放元素时候帮助我们进行类型检查

    //泛型只能接受类，所有的基本数据类型必须使用包装类
    //

    //语法实例
    MyArray<Integer> list =new MyArray<Integer>();

    //不能够在里面放基本类型，int

    //编译器的类型推导：
    //当编译器可以根据上下文推导处类型实参时候，这个时候可以省略实参的填写，
    MyArray<Integer> list2 =new MyArray<>();
    //此处就可以省略，因为可以推导出来需要的类型实参是Integer

    //裸类型
    //是一个泛型类，但是没有带着类型实参，
    MyArray list3=new MyArray();

    //我们自己不要去使用裸类型，裸类型是为了兼容老版本的API保留的机制
    //下买你的类型擦除部分，我们也会讲到编译器是如何使用裸类型

    //
    //泛型是将数据类型参数化，进行传参
    //使用<T>表示当前类是一个泛型类
    //泛型目前为止的有点：数据类型参数化，编译时候自动进行类型转换和检查
    //
    //泛型如何进行编译的

    //1.擦除机制
    //泛型本质是一个非常难的语法，需要时间去打磨
    //
    //在编译过程中，将所有的T替换为Object这种机制，我们称之为：擦除机制
    //java的泛型机制在编译级别实现的，编译器生成的字节码在运行器件并不包括泛型的类型信息
    //
    //提出问题？？
    //如果是直接换的话，为什么不能new T类型对象
    //类型擦除：一定是把T变为Object吗？
    //

    //为什么不能实例化泛型类型数组
    //

}
